#include<iostream>
#include"/Users/yjc/Programming/eurekas-algorithm-path/2.Linklist/Linklist.cpp"

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* ptr=head,*rear,*pre=nullptr;
    while(ptr!=nullptr)
    {
        rear=ptr->next;
        ptr->next=pre;
        pre=ptr;
        ptr=rear;
    }
    return pre;
    //注意这里，最后一个节点处理完之后，pre会移动到最后一个节点处，也就是反转后的头结点
    }

    ListNode* reverseList1(ListNode* head)//递归写法
    {
        if (!head || !head->next) {
            return head;
        }
        ListNode* newHead = reverseList(head->next);//
        head->next->next = head;
        head->next = nullptr;
        return newHead;
    }
};

int main()
{
    LinkList l;
    l.insert(1,0);
    l.insert(2,0);
    l.insert(3,0);
    l.print();
    Solution s;
    l.head= s.reverseList1(l.head);
    l.print();
}